package ThreadBaseTest;
/**
 * Created by yexuan on 2018/3/5.
 *
 * 创建线程的第二种方式： 定义类实现Runnable。
 * 1、定义类实现Runnable接口
 * 2、覆盖Runnable接口中的run方法
 *    将线程要运行的代码存放在该run方法中。
 * 3、通过Thread类建立线程对象
 * 4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
 * 5、调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
 */
class Ticket2 implements Runnable{
    private  int tick = 100;

    //同步代码块
//    Object obj = new Object();
//    @Override
//    public void run() {
//        while(true){
//            synchronized (obj){
//                if(tick>0){
//                    try {
//                        Thread.sleep(10);
//                    }catch (Exception e){
//                    }
//                    System.out.println(Thread.currentThread().getName()+"sale---" + tick--);
//                }
//            }
//        }
//    }

    //同步函数使用的锁是this
    @Override
    public void run() {
        while (true){
            show();
        }
    }

    public synchronized void show(){
        if(tick>0){
            try {
                Thread.sleep(10);
            }catch (Exception e){
            }
            System.out.println(Thread.currentThread().getName()+"sale---" + tick--);
        }
    }
}
public class TicketDemo2 {
    public static void main(String[] args) {
       Ticket2 t = new Ticket2();

       Thread t1 = new Thread(t);
       Thread t2 = new Thread(t);
       Thread t3 = new Thread(t);
       Thread t4 = new Thread(t);

       t1.start();
       t2.start();
       t3.start();
       t4.start();

    }

}
